package com.cyj.dream.core.util.user;

import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;

/**
 * @Description: 生成随机id
 * @BelongsProject: DreamChardonnay
 * @BelongsPackage: com.cyj.dream.core.util.user
 * @Author: ChenYongJia
 * @CreateTime: 2021-09-26 11:30
 * @Email: chen87647213@163.com
 * @Version: 1.0
 */
public class UUIDUtils {

    /**
     * 生成的UUID是带-的字符串，类似于：a5c8a5e8-df2b-4706-bea4-08d0939410e3
     *
     * @return
     */
    public static String getUUIDHave() {
        return IdUtil.randomUUID();
    }

    /**
     * 生成的是不带-的字符串，类似于：b17f24ff026d40949c85a24f4f375d42
     * Hutool重写java.util.UUID的逻辑，对应类为cn.hutool.core.lang.UUID，
     * 使生成不带-的UUID字符串不再需要做字符替换，性能提升一倍左右
     *
     * @return
     */
    public static String getUUIDNoHave() {
        return IdUtil.simpleUUID();
    }

    /**
     * 分布式系统中，有一些需要使用全局唯一ID的场景，有些时候我们希望能使用一种简单一些的ID，
     * 并且希望ID能够按照时间有序生成。Twitter的Snowflake 算法就是这种生成器。注意维持 IdUtil.getSnowflake() 单例模式
     *
     * @param workerId     参数1为终端ID
     * @param dataCenterId 参数2为数据中心ID
     * @return
     */
    public static long getSnowflakeId(long workerId, long dataCenterId) {
        Snowflake snowflake = IdUtil.getSnowflake(workerId, dataCenterId);
        return snowflake.nextId();
    }

    /**
     * 模拟调用 hutool 封装的 IdUtil 工具类生成UUID测试
     *
     * @param args
     */
    public static void main(String[] args) {
        int number = 1000;
        for (int i = 0; i < number; i++) {
            String strID1 = UUIDUtils.getUUIDHave();
            System.out.println(strID1);
            String strID2 = UUIDUtils.getUUIDNoHave();
            System.out.println(strID2);
        }

        System.out.println("" + UUIDUtils.getSnowflakeId(1, 1));
    }

}
